package interceptcrossing;

import interceptcrossing.ui.MainWindow;

import javax.swing.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.Set;

public class Main {

	public static void main(String[] args) {
		if (args.length >= 2) {
			run(args[0], args[1]);
		} else {
			try {
				UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
			} catch (Exception e) {
			}

			SwingUtilities.invokeLater(new Runnable() {

				public void run() {
					MainWindow mainWindow = new MainWindow();
					mainWindow.setVisible(true);
				}
			});
		}
	}

	private static void run(String input, String output) {
		try {
			InterceptFileReader reader = new InterceptFileReader(new File(input));
			List<Intercept> intercepts = reader.readIntercepts();
			IntersectionFinder crossingDetector
				= new IntersectionFinder(intercepts);

			Set<Intersection> intersections
				= crossingDetector.getIntersections();

			if (intersections.isEmpty()) {
				System.out.println("No intersections found");
			} else {
				PrintWriter writer = null;

				try {
					writer = new PrintWriter(new FileWriter(output));

					for (Intersection intersection : intersections) {
						writer.println(intersection.toString());
					}
				} finally {
					if (writer != null) {
						writer.close();
					}
				}
			}
		} catch (IOException ex) {
			System.err.println(ex.getMessage());
		}
	}
}

/*
Пошаговый режим подразумевает как переход на один шаг вперёд, так и возвращение назад.
Панель рисования отрезков выглядит так же, но добавляется рисование вертикальной заметающей прямой.
Каждый шаг останавливается или на границе отрезка, или на их пересечении.

Внизу экрана будет находится timeline, состоящая из:
 1) горизонтальная прямая
 2) проекции точек-границ отрезков на данную горизонтальную прямую
 3) во время выполнения рисуется вертикальная прямая-продолжение заметающей прямой
 4) точки-пересечения отрезков выводятся на timeline постепенно, по мере их обнаружения

Справа на экране находится дерево отрезков:
 1) в вершине отрезок, на границе которого находится заметающая прямая
 если это пересечение отрезков, то любой из них
 2) в левых потомках находятся отрезки, которые пересекает заметающая прямая и находящиеся ниже данного отрезка
 3) в правых потомках -"-, но находящиеся выше данного отрезка
 4) в вершинах дерева находятся номера отрезков
 */
